package com.fight.strive.sys.modules.redis;

import java.util.List;
import java.util.concurrent.TimeUnit;

public interface RedisService {

    /**
     * 向 redis 中存值
     *
     * @param key   键
     * @param value 值
     */
    void valueSet(String key, Object value);

    /**
     * 向 redis 中存值
     *
     * @param key      键
     * @param value    值
     * @param timeout  超时时间
     * @param timeUnit 单位
     */
    void valueSet(String key, Object value, long timeout, TimeUnit timeUnit);

    /**
     * 获取redis中的值
     *
     * @param key key
     * @param clz 类型
     * @param <T> 泛型
     * @return 返回值
     */
    <T> T valueGet(String key, Class<T> clz);

    /**
     * 删除redis中的键值
     *
     * @param key 键
     */
    void valueDelete(String key);

    /**
     * 在 redis 中存储 hash 值
     *
     * @param key      key
     * @param objKey   objKey
     * @param objValue objValue
     */
    void hashPut(String key, Object objKey, Object objValue);

    /**
     * 获取返回值
     *
     * @param key    key
     * @param objKey objKey
     * @param clz    clz
     * @param <T>    模板
     * @return T
     */
    <T> T hashGet(String key, Object objKey, Class<T> clz);

    /**
     * 获取返回值
     *
     * @param key    key
     * @param objKey objKey
     * @param clz    clz
     * @param <T>    模板
     * @return T
     */
    <T> List<T> hashGetList(String key, Object objKey, Class<T> clz);

    /**
     * 删除 redis 数据
     *
     * @param key    key
     * @param objKey objKey
     */
    void hashDelete(String key, Object... objKey);
}
